﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Datos.Entidades;
using Datos.Fabricas;
using Datos.Interfaces;
using System.Data.SqlClient;
using Datos.Entidades.FabricaEntidades;
using log4net;

namespace Datos.DAOSqlServer
{
    public class DAOSqlAccesoXML:IDAOAccesoXML
    {
         #region Logger
        private static readonly ILog log = LogManager.GetLogger(
        System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);





        #endregion 
        
       IDAOAccesoConexion bd = FabricaConexion.DAOSqlServerAccesoConexion();

       public DAOSqlAccesoXML()
       {
           log.Info("Conexion DAOSqlAccesoXML");
       }


        /// <summary>
        ///Selec todos lo en la base de datos
        /// </summary>
        /// <param name="participante">Participante a insertar</param>
        /// <returns>Si la creación fue exitosa o no</returns>
       public List<Entidad> BuscarParticipanteXML()
       {
           SqlCommand command = new SqlCommand();
           try
           {
               bd.AbrirConexionBd();
               command.Connection = bd.ObjetoConexion();
               command.CommandType = System.Data.CommandType.StoredProcedure;
               command.CommandText = "[dbo].[Apuestas]";
               command.CommandTimeout = 10;
               SqlDataReader reader = command.ExecuteReader();
               List<Entidad> miLista = new List<Entidad>();
               
               while (reader.Read())
               {
                   Entidad accesos = FabricaEntidades.ObtenerAccesos();
                   (accesos as Acceso).IdAcceso = (reader.GetInt32(0));
                   (accesos as Acceso).Fecha = (reader["fecha"].ToString());
                   (accesos as Acceso).Hora = (reader.GetInt32(2));
                   (accesos as Acceso).Min = (reader.GetInt32(3));
                   (accesos as Acceso).MontoApostado = (reader.GetInt64(4));
                   (accesos as Acceso).FkIdEvento = (reader.GetInt32(5));
                   (accesos as Acceso).FkIdHistorialParticipante = (reader.GetInt32(6));
                   (accesos as Acceso).Exportado=(reader.GetInt32(7));
                   (accesos as Acceso).FkIdMaquina = (reader.GetInt32(8));
                   
                   miLista.Add(accesos);
               } log.Info("Se genero la consulta");
               reader.Close();
               bd.CerrarConexionBd();
               return miLista;

           }
           catch (SqlException)
           {
               log.Error("no se genero la consulta");
               bd.CerrarConexionBd();
               return null;
           }
           catch (Exception)
           {
               log.Error("Error en la aplicacion");

               bd.CerrarConexionBd();
               return null;
           }
       }

       public bool ModificarAcceso(int id)
       {

           SqlCommand command = new SqlCommand();

           try
           {
               bd.AbrirConexionBd();
               command.Connection = bd.ObjetoConexion();
               command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
               command.CommandText = "[dbo].[UPDAcceso]"; // Nombre del Procedimiento Almacenado en la Base de Datos
               command.CommandTimeout = 10;
               command.Parameters.AddWithValue("@Id",id);
               command.Parameters.AddWithValue("@Estatus", 1);
               SqlDataReader reader = command.ExecuteReader();
               reader.Close();
               bd.CerrarConexionBd();
               log.Info("Se genero la consulta");
               return (true);
           }

           catch (SqlException)
           {
               log.Error("Error en la consulta");
               bd.CerrarConexionBd();
               return false;
           }

           catch (Exception)
           {
               log.Error("Error en la aplicacion");
               bd.CerrarConexionBd();
               return false;
           }
       }
    }
}
